<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    class Cat {
        constructor(name, color) {
            this.name = name;
            this.color = color;
        }
        call() {
            console.log("喵喵");
        }
        skill() {
            console.log("抓老鼠");
        }
        say() {
            console.log(this.name, this.color);
        }
    }
    Cat.prototype.species = "猫";

    var Tom = new Cat("Tom", "green");


    // 方法
    // 1. toString()   将其他类型转化为字符串
    console.log(Tom.toString());
    // 2. valueOf()    返回数据对应的值
    console.log(Tom.valueOf());
    // 3.instanceof     判断某个实 例化对象的原型链上是否存在某个构造函数的原型对象
    console.log(Tom instanceof Object);     // true
    console.log(Tom instanceof Array);      // false
    console.log(Tom instanceof Cat);        // true
    // 4.isPrototypeOf  判断 某个构造函数的原型对象   是否存在于  某个实例化对象的原型链上
    console.log(Cat.prototype.isPrototypeOf(Tom));            // true
    console.log(Object.prototype.isPrototypeOf(Tom));         // true
    console.log(Array.prototype.isPrototypeOf(Tom));          // false
    // 5.hasOwnProperty()   判断某个实例化对象 是否存在某个属性(只找实例自身的 不找原型链)
    console.log(Tom.hasOwnProperty("name"));    //true
    console.log(Tom.hasOwnProperty("species")); // false
    // 6.in   判断某个实例化对象 是否存在某个属性(既找实例自身的 也找原型链)
    console.log("name" in Tom);    // true
    console.log("species" in Tom); // true
    console.log("toString" in Tom); // true
    //7.propertyIsEnumerable  返回一个布尔值  表示指定的属性是否可枚举(遍历)  (只找实例自身的 不找原型链)
    console.log(Tom.propertyIsEnumerable("name"));      // true
    console.log(Tom.propertyIsEnumerable("species"));   // false

</script>

</html>